<?xml version="1.0" encoding="utf-8"?>
<xsd:schema targetNamespace="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008" xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<!-- Font Weight -->
	<xsd:simpleType name="FontWeight">
		<xsd:union>
			<xsd:simpleType>
				<xsd:restriction base="xsd:integer">
					<xsd:minInclusive value="1"/>
					<xsd:maxInclusive value="999"/>
				</xsd:restriction>
			</xsd:simpleType>
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="bold"/>
					<xsd:enumeration value="normal"/>
					<xsd:enumeration value="regular"/>
					<!-- should we support other font weigth names? -->
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:union>
	</xsd:simpleType>
	
	<!-- Font Style -->
	<xsd:simpleType name="FontStyle">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="italic"/>
			<xsd:enumeration value="normal"/>
			<xsd:enumeration value="oblique"/>
		</xsd:restriction>
	</xsd:simpleType>
	
	<!-- Color -->
	<xsd:attributeGroup name="ColorAttributes">
		<xsd:attribute name="foreground" type="xsd:string" use="optional" />
		<xsd:attribute name="background" type="xsd:string" use="optional" />
		<xsd:attribute name="fontWeight" type="FontWeight" use="optional" />
		<xsd:attribute name="fontStyle" type="FontStyle" use="optional" />
	</xsd:attributeGroup>
	
	<xsd:attributeGroup name="ColorReferenceAttributes">
		<xsd:attributeGroup ref="ColorAttributes" />
		<xsd:attribute name="color" type="xsd:string" use="optional" />
	</xsd:attributeGroup>
	
	<xsd:element name="Color">
		<xsd:complexType>
			<xsd:attribute name="name" type="xsd:string" use="required" />
			<xsd:attribute name="exampleText" type="xsd:string" use="optional" />
			<xsd:attributeGroup ref="ColorAttributes"/>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="Property">
		<xsd:complexType>
			<xsd:attribute name="name" type="xsd:string" use="required" />
			<xsd:attribute name="value" type="xsd:string" use="required" />
		</xsd:complexType>
	</xsd:element>
	
	<!-- Regular expression -->
	<xsd:simpleType name="regex">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	
	<xsd:simpleType name="regexIgnorePatternWhitespace">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	
	<!-- Keywords -->
	<xsd:element name="Keywords">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="Word" minOccurs="1" maxOccurs="unbounded"/>
			</xsd:sequence>
			<xsd:attributeGroup ref="ColorReferenceAttributes"/>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:element name="Word" type="xsd:string"/>
	
	<!-- Spans -->
	<xsd:element name="Span">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="Begin" minOccurs="0" maxOccurs="1"/>
				<xsd:element ref="End" minOccurs="0" maxOccurs="1"/>
				<xsd:element ref="RuleSet" minOccurs="0" maxOccurs="1"/>
			</xsd:sequence>
			
			<xsd:attributeGroup ref="ColorReferenceAttributes"/>
			<xsd:attribute name="multiline" type="xsd:boolean" use="optional"/>
			<xsd:attribute name="ruleSet" type="xsd:string" use="optional"/>
			<xsd:attribute name="begin" type="regex" use="optional"/>
			<xsd:attribute name="end" type="regex" use="optional"/>
		</xsd:complexType>
	</xsd:element>
	
	<xsd:complexType name="SpanBeginEnd">
		<xsd:simpleContent>
			<xsd:extension base="regexIgnorePatternWhitespace">
				<xsd:attributeGroup ref="ColorReferenceAttributes"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	
	<xsd:element name="Begin" type="SpanBeginEnd"/>
	<xsd:element name="End" type="SpanBeginEnd"/>
	
	<!-- Imports -->
	<xsd:element name="Import">
		<xsd:complexType>
			<xsd:attribute name="ruleSet" type="xsd:string" use="required"/>
		</xsd:complexType>
	</xsd:element>
	
	<!-- Rules -->
	<xsd:element name="Rule">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="regexIgnorePatternWhitespace">
					<xsd:attributeGroup ref="ColorReferenceAttributes"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	
	<!-- Rule set -->
	<xsd:element name="RuleSet">
		<xsd:complexType>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element ref="Keywords"/>
				<xsd:element ref="Span"/>
				<xsd:element ref="Import"/>
				<xsd:element ref="Rule"/>
			</xsd:choice>
			<xsd:attribute name="name" type="xsd:string" use="optional" />
			<xsd:attribute name="ignoreCase" type="xsd:boolean" use="optional" />
		</xsd:complexType>
	</xsd:element>
	
	<!-- Main syntax definition -->
	<xsd:element name="SyntaxDefinition">
		<xsd:complexType>
			<xsd:choice minOccurs="1" maxOccurs="unbounded">
				<xsd:element ref="Property"/>
				<xsd:element ref="Color"/>
				<xsd:element ref="RuleSet"/>
			</xsd:choice>
			<xsd:attribute name="name" type="xsd:string" use="optional" />
			<xsd:attribute name="extensions" type="xsd:string" use="optional" />
		</xsd:complexType>
	</xsd:element>
</xsd:schema>